/*
 * RSProjectionTechnique.h
 *
 *  Created on: 2010/03/15
 *      Author: alexandre
 */

#ifndef RSPROJECTIONTECHNIQUE_H_
#define RSPROJECTIONTECHNIQUE_H_

#include "RSTechniqueCommon.h"

namespace Realsphere {

    class RSProjectionTechnique : public Realsphere::RSTechniqueCommon {
        Q_OBJECT
        public:
            RSProjectionTechnique ();
            virtual ~RSProjectionTechnique ();

        public:
            QMatrix4x4                      ProjectionMatrix () const;
            RSProjectionElementType         ProjectionType () const;
            RSProjectionTechniqueElement*   ProjectionElement () const;

        public slots:
            RSError                         SetProjectionElement ( RSProjectionTechniqueElement* rProjectionElement );

        signals:
            void                            ProjectioElementAdded ( RSProjectionTechniqueElement* rProjectionElement );
            void                            ProjectioElementRemoved ( RSProjectionTechniqueElement* rProjectionElement );

        protected:
            RSError                         BeforeAddChildElement ( RSElement* rChild );
            bool                            AfterAddChildElement ( RSElement* rChild );
            bool                            AfterRemoveChildElement ( RSElement* rChild );

        private:
            RSProjectionTechniqueElement*   mProjectionElement;
    };

}

#endif /* RSPROJECTIONTECHNIQUE_H_ */
